/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Presenter;

import DAO.ParametroDAO;
import DAO.UsuarioDAO;
import Model.Parametro;
import Model.Perfil;
import Model.Usuario;
import Principals.Main;
import java.util.List;

/**
 *
 * @author walter
 */
public class UsuarioPresenter {

    public static Usuario login(String user, String pass) {
        Parametro contrasenha = ParametroDAO.getParametroByValorString(user,pass);
        if (contrasenha == null) {
            return null;
        }
        return UsuarioDAO.login(user, contrasenha);
    }

    public static Usuario olvidoContrasenha(String user) {
        if (user == null) {
            return null;
        }
        return UsuarioDAO.olvidoContrasenha(user);
    }

    public static void setContrasenhaOlvidada(Usuario usr, String contrasenha) {
        Parametro parAnt = new Parametro();
        parAnt = usr.getParametro();
        parAnt.setEstado(0);
        ParametroDAO.updateParametro(parAnt);

        Parametro parNuevo = new Parametro();
        parNuevo.setNombre("contrasenha");
        parNuevo.setTipoParametro("CONTRASENHA");
        parNuevo.setValorString(contrasenha);
        parNuevo.setIdPadre(usr.getIdUsuario());
        parNuevo.setEstado(1);
        ParametroDAO.insertParametro(parNuevo);

        usr.setParametro(parNuevo);
        usr.setEstadoSesion(2);
        UsuarioDAO.cambiarContrasenha(usr);
    }

    public static Usuario cambiarContrasenha(String pass) {
        Usuario usr = Main.usr;

        Parametro parAnt = new Parametro();
        parAnt = usr.getParametro();
        parAnt.setEstado(0);
        ParametroDAO.updateParametro(parAnt);

        Parametro par = new Parametro();
        par.setNombre("contrasenha");
        par.setTipoParametro("CONTRASENHA");
        par.setValorString(pass);
        par.setIdPadre(usr.getIdUsuario());
        par.setEstado(1);
        ParametroDAO.insertParametro(par);

        usr.setParametro(par);
        UsuarioDAO.cambiarContrasenha(usr);
        Main.usr = usr;
        return usr;
    }

    public static Usuario cambiarContrasenhaPorOlvido(Usuario usr, String pass) {
        Parametro parAnt = new Parametro();
        parAnt = usr.getParametro();
        parAnt.setEstado(0);
        ParametroDAO.updateParametro(parAnt);

        Parametro par = new Parametro();
        par.setTipoParametro("CONTRASENHA");
        par.setValorString(pass);
        par.setNombre("contrasenha");
        par.setIdPadre(usr.getIdUsuario());
        par.setEstado(1);
        ParametroDAO.insertParametro(par);

        usr.setParametro(par);
        usr.setEstadoSesion(1);
        UsuarioDAO.cambiarContrasenha(usr);
        Main.usr = usr;
        return usr;
    }

    public static boolean validaContrasenhaHistorica(String pass, Usuario user) {
        List<Parametro> lstParametro = UsuarioDAO.buscaContrasenhasHistoricas(user);

        for (int i = 0; i < lstParametro.size(); i++) {
            Parametro p = lstParametro.get(i);
            if (p.getValorString().equals(pass)) {
                return false;
            }
        }
        return true;
    }

    public static boolean validaUsuarioCreado(String usuario) {
        return UsuarioDAO.buscaUsuario(usuario);
    }

    public static Usuario registrarUsuario(String nUsuario, Perfil perfil, String contrasenha) {
        int i = 1;
        if (validaUsuarioCreado(nUsuario)) {
            while (validaUsuarioCreado(nUsuario + i)) {
                i++;
            }
            nUsuario = nUsuario + i;
        }

        Parametro par = new Parametro();
        par.setTipoParametro("CONTRASENHA");
        par.setValorString(contrasenha);
        par.setNombre("contrasenha");
        par.setEstado(1);
        ParametroDAO.insertParametro(par);

        Usuario usr = new Usuario();
        usr.setUsuario(nUsuario);
        usr.setPerfil(perfil);
        usr.setParametro(par);
        usr.setEstadoSesion(2);
        Usuario usr_ins = UsuarioDAO.insertUsuario(usr);

        par.setIdPadre(usr_ins.getIdUsuario());
        ParametroDAO.updateParametro(par);
        return usr_ins;
    }

    public static void registrarLogUsuario(Usuario usr, String tabla, String Detalle, String operacion) {
        try {
            UsuarioDAO.registrarLogUsuario(usr, tabla, Detalle, operacion);
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR: " + e.toString());
        }
    }
}
